package com.atguigu.gmall.product.client.feign;

import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.client.feign.fallback.ProductFeignClientFallBack;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author wk
 * @create 2021-08-30 18:19
 * 提供商品信息的远程调用接口
 */
@Service
@FeignClient(value = "service-product", fallback = ProductFeignClientFallBack.class)
public interface ProductFeignClient {
    /**
     * https://item.jd.com/100016034372.html
     *
     * @param skuId 库存id 100016034372
     * @return 库存信息
     */
    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
    @ApiOperation("获取库存信息和图片")
    SkuInfo getSkuInfo(@PathVariable Long skuId);

    /**
     * @param category3Id 三级标题id
     * @return 一二三级分类视图
     */
    @ApiOperation("根据三级标题id获取一二三级分类视图")
    @GetMapping("/api/product/inner/getCategoryView/{category3Id}")
    BaseCategoryView getBaseCategoryView(@PathVariable Long category3Id);

    /**
     * @param skuId 库存id
     * @return 返回对应商品的价格
     * 商品价格使用 BigDecimal
     */
    @ApiOperation("根据库存id获取价格信息")
    @GetMapping("/api/product/inner/getSkuPrice/{skuId}")
    BigDecimal getSkuPrice(@PathVariable Long skuId);

    /**
     * @param skuId
     * @param spuId
     * @return 销售属性集合和属性值集合
     */
    @ApiOperation("根据spuId，skuId 查询销售属性及值集合")
    @GetMapping("/api/product/inner/getSpuSaleAttrListCheckBySku/{skuId}/{spuId}")
    List<SpuSaleAttr> getSpuSaleAttrListCheckBySku(@PathVariable Long skuId, @PathVariable Long spuId);

    /**
     * 后台要生成一个“属性值1|属性值2|属性值3：skuId”的一个json串以提供页面进行匹配
     *
     * @param spuId
     * @return 返回一个map集合用来封装属性id数据和库存id
     */
    @ApiOperation("根据spuId 查询不同销售属性值组合和库存id")
    @GetMapping("/api/product/inner/getSkuValueIdsMap/{spuId}")
    Map getSkuValueIdsMap(@PathVariable Long spuId);

    /**
     * 获取所有三级分类
     *
     * @return
     */
    @GetMapping("/api/product/inner/getBaseCategoryViewList")
    @ApiOperation("查询所有的一二三级分类列表")
    List<BaseCategoryView> getBaseCategoryViewList();

    /**
     * 获取品牌相关信息
     *
     * @param tmId
     * @return
     */
    @GetMapping("/api/product/inner/getBaseTrademark/{tmId}")
    BaseTrademark getBaseTrademark(@PathVariable Long tmId);

    // 获取库存的平台属性
    @GetMapping("/api/product/inner/getSkuAttrValue/{skuId}")
    List<SkuAttrValue> getSkuAttrValue(@PathVariable Long skuId);
}
